package org.com.creationalPattern.abstractFactory;

/**
 * 抽象工厂
 * @author Jonny
 * @version 1.0
 * @Description:
 * @date 2021/4/14 11:27
 *
 */

/**
 * 抽象工厂模式是工厂方法模式的进一步抽象，针对的是一族产品。如果产品族中只有一种产品，则抽象工厂模式就退化为工厂方法模式。
 * 除了工厂方法模式的优点外，抽象工厂模式还具有下列优点。
 * ■ 产品族内的约束为非公开状态，在不同的工厂中，各种产品可能具有不同的相互依赖关系，这些依赖关系由工厂封装在其内部，
 * 对于工厂的使用者是不可见的。
 * ■ 生产线的扩展非常容易，如果要针对同一产品族建立新的生产线，只需要实现产品族中的所有产品接口并建立新的工厂类即可。
 *
 *
 * 抽象工厂模式的最大缺点就是产品族本身的扩展非常困难，如果需要在产品族中增加一个新的产品类型，
 * 则需要修改多个接口，并且会影响已有的工厂类。
 *
 * 抽象工厂模式的使用场景是：当一个对象族（或是一组没有任何关系的对象）都有相同的约束，
 * 则可以使用抽象工厂模式。抽象工厂模式是一个简单的模式，使用的场景非常多，
 * 例如，应用需要涉及不同操作系统的时候，可以考虑使用抽象工厂模式，如果需要在三个不同的平台（Windows、Linux、Android）上运行，
 * 则可以通过抽象工厂模式屏蔽掉操作系统对应用的影响。三个不同操作系统上的软件功能、应用逻辑、UI都应该是非常类似的，
 * 唯一不同的是调用不同的工厂方法，由不同的产品类去处理与操作系统交互的信息。
 *
 */
public interface AbstractFactory {
    ProductA factoryA();
    ProductB factoryB();
}
